/**
 * 认证工具
 * 管理用户登录状态和权限
 */

import api from './api.js';

// 权限配置
const ROLES = {
  ADMIN: 'admin',
  USER: 'user',
  GUEST: 'guest'
};

// 检查用户是否已登录
const isLoggedIn = () => {
  const token = uni.getStorageSync('token');
  return !!token;
};

// 获取当前用户信息
const getCurrentUser = () => {
  const userJson = uni.getStorageSync('user');
  try {
    return userJson ? JSON.parse(userJson) : null;
  } catch (e) {
    console.error('解析用户信息失败', e);
    return null;
  }
};

// 检查用户是否有某个角色
const hasRole = (role) => {
  const user = getCurrentUser();
  return user && user.role === role;
};

// 检查用户是否是管理员
const isAdmin = () => {
  return hasRole(ROLES.ADMIN);
};

// 强制用户登录，如果未登录则跳转到登录页
const requireLogin = (callback) => {
  if (isLoggedIn()) {
    // 验证token有效性
    api.validateToken()
      .then(isValid => {
        if (isValid) {
          // token有效，执行回调
          if (typeof callback === 'function') {
            callback();
          }
        } else {
          // token无效，跳转到登录页
          redirectToLogin();
        }
      })
      .catch(() => {
        // 验证失败，跳转到登录页
        redirectToLogin();
      });
  } else {
    // 未登录，跳转到登录页
    redirectToLogin();
  }
};

// 跳转到登录页
const redirectToLogin = (message = '请先登录') => {
  // 清除登录信息
  uni.removeStorageSync('token');
  uni.removeStorageSync('user');
  
  // 显示提示
  if (message) {
    uni.showToast({
      title: message,
      icon: 'none',
      duration: 2000
    });
  }
  
  // 跳转到登录页
  setTimeout(() => {
    uni.reLaunch({
      url: '/pages/login/login'
    });
  }, 1500);
};

// 登出
const logout = () => {
  // 清除登录信息
  uni.removeStorageSync('token');
  uni.removeStorageSync('user');
  
  // 显示提示
  uni.showToast({
    title: '已退出登录',
    icon: 'success',
    duration: 2000
  });
  
  // 跳转到登录页
  setTimeout(() => {
    uni.reLaunch({
      url: '/pages/login/login'
    });
  }, 1500);
};

// 导出工具
export default {
  ROLES,
  isLoggedIn,
  getCurrentUser,
  hasRole,
  isAdmin,
  requireLogin,
  redirectToLogin,
  logout
}; 